package web.suzy.oj.service.oj;

import web.suzy.oj.common.exception.StatusFailException;
import web.suzy.oj.common.exception.StatusSystemErrorException;
import web.suzy.oj.common.result.ResultBean;
import web.suzy.oj.pojo.dto.ChangeEmailDTO;
import web.suzy.oj.pojo.dto.ChangePasswordDTO;
import web.suzy.oj.pojo.dto.CheckUsernameOrEmailDTO;
import web.suzy.oj.pojo.vo.*;

/**
 * YangSuzy 软件工作室
 * 类名: AccountService
 * 描述: ---- 待定 -----
 * 功能: ---- 待定 -----
 *
 * @author YangSuzy
 * Date: 2022/11/14 18:02
 */
public interface AccountService {
    /**
     * 方法名: checkUsernameOrEmail
     * 描述: 检查用户名或密码是否存在
     *
     * @param checkUsernameOrEmailDto
     * @return web.suzy.oj.common.result.ResultBean<web.suzy.oj.pojo.vo.CheckUsernameOrEmailVO>
     * @date 2022/11/14 18:03
     * @auther YangSuzy
     **/
    ResultBean<CheckUsernameOrEmailVO> checkUsernameOrEmail(CheckUsernameOrEmailDTO checkUsernameOrEmailDto);

    /**
     * 方法名: changePassword
     * 描述: 修改密码
     *
     * @param changePasswordDto
     * @return web.suzy.oj.common.result.ResultBean<web.suzy.oj.pojo.vo.ChangeAccountVO>
     * @date 2022/11/14 20:22
     * @auther YangSuzy
     **/
    ResultBean<ChangeAccountVO> changePassword(ChangePasswordDTO changePasswordDto);

    /**
     * 方法名: changeEmail
     * 描述: 修改邮箱
     *
     * @param changeEmailDto
     * @return web.suzy.oj.common.result.ResultBean<web.suzy.oj.pojo.vo.ChangeAccountVO>
     * @date 2022/11/15 11:54
     * @auther YangSuzy
     **/
    ResultBean<ChangeAccountVO> changeEmail(ChangeEmailDTO changeEmailDto);

    /**
     * 方法名: changeUserInfo
     * 描述: 修改用户信息
     *
     * @param userInfoVo
     * @return web.suzy.oj.common.result.ResultBean<web.suzy.oj.pojo.vo.UserInfoVO>
     * @date 2022/11/15 12:12
     * @auther YangSuzy
     **/
    ResultBean<UserInfoVO> changeUserInfo(UserInfoVO userInfoVo);

    /**
     * 方法名: getUserHomeInfo
     * 描述: 获取用户主页信息
     *
     * @param uid      用户ID
     * @param username 用户名
     * @return web.suzy.oj.common.result.ResultBean<web.suzy.oj.pojo.vo.UserHomeVO>
     * @date 2022/11/23 14:37
     * @auther YangSuzy
     **/
    ResultBean<UserHomeVO> getUserHomeInfo(String uid, String username);

    /**
     * 方法名: getUserCalendarHeatmap
     * 描述: 获取用户主页的提交热力图
     *
     * @param uid      用户ID
     * @param username 用户名
     * @return web.suzy.oj.common.result.ResultBean<web.suzy.oj.pojo.vo.UserCalendarHeatmapVO>
     * @date 2022/11/23 16:12
     * @auther YangSuzy
     **/
    ResultBean<UserCalendarHeatmapVO> getUserCalendarHeatmap(String uid, String username);
}
